/*
 * EmpresaClienteDAL.java
 *
 * Created on 23 de agosto de 2007, 15:08
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package dal;

import bd.BoundParam;
import bd.ConexionAvw;
import excepciones.AvwException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import negocio.EmpresaClienteNegocio;
import negocio.Ubicacion;
import util.Recurso;

import util.Utiles;

/**
 *
 * @author Administrador
 */
public class EmpresaClienteDAL {
    
     static final Logger logger = Utiles.iniciarLogger("EmpresaClienteDAL", false);
     
    public EmpresaClienteDAL() {
    }
    
     public static ArrayList<EmpresaClienteNegocio> listarEmpresaCliente() throws AvwException {
        
        ArrayList<EmpresaClienteNegocio> empresacliente = new ArrayList<EmpresaClienteNegocio>();
        
        StringBuilder sql = new StringBuilder();
        ResultSet rs;
        ConexionAvw conexion = new ConexionAvw();
        sql.append("SELECT ");
        sql.append("ecl_codigo, ");
        sql.append(" ecl_descripcion, ");        
        sql.append(" ecl_telefono, ");        
        sql.append(" ecl_cuit, ");        
        sql.append(" ecl_mail, ");        
        sql.append(" ecl_calle, ");        
        sql.append(" ecl_numero, ");        
        sql.append(" ecl_piso, ");        
        sql.append(" ecl_dpto, ");        
        sql.append(" ecl_localidad, ");        
        sql.append(" ecl_provincia, ");        
        sql.append(" ecl_pais ");                
        sql.append("FROM avw_produccion.empresa_cliente ");

        try {
            conexion.abrirConexion();
            rs = conexion.getPreparedStatementResultSet(sql, null);

            while (rs.next()) {
                EmpresaClienteNegocio empresa = new EmpresaClienteNegocio();
                empresa.setEclCodigo(rs.getString("ecl_codigo"));
                //empresa.setEclCodigo(rs.getString(0));
                empresa.setEclDescripcion(rs.getString("ecl_descripcion"));
                empresa.setEclTelefono(rs.getString("ecl_telefono"));
                empresa.setEclCuit(rs.getString("ecl_cuit"));
                empresa.setEclMail(rs.getString("ecl_mail"));
                empresa.setEclCalle(rs.getString("ecl_calle"));
                empresa.setEclNumero(rs.getString("ecl_numero"));
                empresa.setEclPiso(rs.getString("ecl_piso"));
                empresa.setEclDpto(rs.getString("ecl_dpto"));
                empresa.setEclLocalidad(new Ubicacion(rs.getString("ecl_localidad")));
                empresa.setEclProvincia(new Ubicacion(rs.getString("ecl_provincia")));
                empresa.setEclPais(new Ubicacion(rs.getString("ecl_pais")));
                
                empresacliente.add(empresa);                
            }
        } catch (SQLException e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
            throw new AvwException(e);
        } finally {
            conexion.cerrarConexion();
        }

        return empresacliente;
    }
     /**
     * Lista todas las empresas existentes en el sistema
     * @return ArrayList de objetos EmpresaClientes
      *filtra por codigo, descripcion, mail o telefono
     */
    public static ArrayList<EmpresaClienteNegocio> listarEmpresaClienteFiltro(int opcionFiltro, String filtro)throws AvwException {
        ArrayList<EmpresaClienteNegocio> empresaCliente = new ArrayList<EmpresaClienteNegocio>();
        
        StringBuilder sql = new StringBuilder();
        ResultSet rs;
        ConexionAvw conexion = new ConexionAvw();
        
        sql.append("SELECT ");
        sql.append("ecl_codigo, ");
        sql.append(" ecl_descripcion, ");        
        sql.append(" ecl_telefono, ");        
        sql.append(" ecl_cuit, ");        
        sql.append(" ecl_mail, ");        
        sql.append(" ecl_calle, ");        
        sql.append(" ecl_numero, ");        
        sql.append(" ecl_piso, ");        
        sql.append(" ecl_dpto, ");        
        sql.append(" ecl_localidad, ");        
        sql.append(" ecl_provincia, ");        
        sql.append(" ecl_pais ");        
        sql.append("FROM avw_produccion.empresa_cliente ");
        sql.append("WHERE ");        
        switch (opcionFiltro) {
            case 0:
                sql.append(" (ecl_codigo LIKE '%");
                sql.append(filtro.toUpperCase());
                sql.append("%'");
                sql.append(" OR ecl_descripcion LIKE '%");
                sql.append(filtro.toUpperCase());
                sql.append("%')");
                break;
            case 1:
                sql.append(" ecl_codigo LIKE '%");
                sql.append(filtro.toUpperCase());
                sql.append("%'");
                break;
            case 2:
                sql.append(" ecl_descripcion LIKE '%");
                sql.append(filtro.toUpperCase());
                sql.append("%'");
                break;
            case 3:
                sql.append(" ecl_mail LIKE '%");
                sql.append(filtro);
                sql.append("%'");
                break;
            case 4:
                sql.append(" ecl_telefono LIKE '%");
                sql.append(filtro.toUpperCase());
                sql.append("%'");
                break;
            case 5:
                break;
            default:
                break;
        }
        sql.append(" ORDER BY ecl_descripcion ");
        try {
            logger.info("Consulto todas las empresas clientes");
            logger.info(sql.toString());
            conexion.abrirConexion();
            rs = conexion.getPreparedStatementResultSet(sql, null);
            
            while (rs.next()) {
                 EmpresaClienteNegocio empresa = new EmpresaClienteNegocio();
                empresa.setEclCodigo(rs.getString("ecl_codigo"));
                //empresa.setEclCodigo(rs.getString(0));
                empresa.setEclDescripcion(rs.getString("ecl_descripcion"));
                empresa.setEclTelefono(rs.getString("ecl_telefono"));
                empresa.setEclCuit(rs.getString("ecl_cuit"));
                empresa.setEclMail(rs.getString("ecl_mail"));
                empresa.setEclCalle(rs.getString("ecl_calle"));
                empresa.setEclNumero(Utiles.noNull(rs.getString("ecl_numero")));
                empresa.setEclPiso(rs.getString("ecl_piso"));
                empresa.setEclDpto(rs.getString("ecl_dpto"));
                empresa.setEclLocalidad(new Ubicacion(rs.getString("ecl_localidad")));
                empresa.setEclProvincia(new Ubicacion(rs.getString("ecl_provincia")));
                empresa.setEclPais(new Ubicacion(rs.getString("ecl_pais")));                
                
                empresaCliente.add(empresa);                
            }
        } catch (SQLException e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
            throw new AvwException(e);
        } finally {
            conexion.cerrarConexion();
        }
        
        return empresaCliente;
    }
    /**
     *Busca un los datos completos de una empresa cliente
     *return empresa cliente con sus datos completos.
     **/
    public static EmpresaClienteNegocio obtenerEmpresaCliente(String eclCodigo ) throws AvwException{
        EmpresaClienteNegocio empresacliente = new EmpresaClienteNegocio();
       
        StringBuilder sql = new StringBuilder();
        ResultSet rs;
        ConexionAvw conexion = new ConexionAvw();
              
        sql.append("SELECT ");
        sql.append("ecl_codigo, ");
        sql.append(" ecl_descripcion, ");        
        sql.append(" ecl_telefono, ");        
        sql.append(" ecl_cuit, ");        
        sql.append(" ecl_mail, ");        
        sql.append(" ecl_calle, ");        
        sql.append(" ecl_numero, ");        
        sql.append(" ecl_piso, ");        
        sql.append(" ecl_dpto, ");        
        sql.append(" ecl_localidad, ");        
        sql.append(" ecl_provincia, ");        
        sql.append(" ecl_pais ");        
        sql.append("FROM avw_produccion.empresa_cliente ");
        sql.append("WHERE ecl_codigo = ");        
        sql.append(eclCodigo.toUpperCase());
        //sql.append("%'");
        try {
            
            logger.info("Consulto una empresa cliente");
            logger.info(sql.toString());
            conexion.abrirConexion();
            rs = conexion.getPreparedStatementResultSet(sql,null);
            
            while(rs.next()){
                
                empresacliente.setEclCodigo(Utiles.noNull(rs.getString("ecl_codigo")));
                empresacliente.setEclDescripcion(Utiles.noNull(rs.getString("ecl_descripcion")));             
                empresacliente.setEclTelefono(Utiles.noNull(rs.getString("ecl_telefono")));
                empresacliente.setEclCuit(Utiles.noNull(rs.getString("ecl_cuit")));
                empresacliente.setEclMail(Utiles.noNull(rs.getString("ecl_mail")));
                empresacliente.setEclCalle(Utiles.noNull(rs.getString("ecl_calle")));
                empresacliente.setEclNumero(Utiles.noNull(rs.getString("ecl_numero")));
                empresacliente.setEclPiso(Utiles.noNull(rs.getString("ecl_piso")));
                empresacliente.setEclDpto(Utiles.noNull(rs.getString("ecl_dpto")));
                empresacliente.setEclLocalidad(new Ubicacion(Utiles.noNull(rs.getString("ecl_localidad"))));
                empresacliente.setEclProvincia(new Ubicacion(Utiles.noNull(rs.getString("ecl_provincia"))));
                empresacliente.setEclPais(new Ubicacion(Utiles.noNull(rs.getString("ecl_pais"))));     
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }finally {
            conexion.cerrarConexion();
        }
        return empresacliente;                              
    }
    /**
     *Verifica si existe empresa cliente con un mail en particular.
     **/
    public static EmpresaClienteNegocio obtenerEmpresaClientePorMail(String eclMail) throws AvwException{
        
        EmpresaClienteNegocio empresacliente = new EmpresaClienteNegocio();
        StringBuilder sql = new StringBuilder();
        ResultSet rs;
        ConexionAvw conexion = new ConexionAvw();
        ArrayList params = new ArrayList();
        int pos=0;
        sql.append("SELECT ");
        sql.append("ecl_codigo, ");
        sql.append(" ecl_descripcion, ");        
        sql.append(" ecl_telefono, ");        
        sql.append(" ecl_cuit, ");        
        sql.append(" ecl_mail, ");        
        sql.append(" ecl_calle, ");        
        sql.append(" ecl_numero, ");        
        sql.append(" ecl_piso, ");        
        sql.append(" ecl_dpto, ");        
        sql.append(" ecl_localidad, ");        
        sql.append(" ecl_provincia, ");        
        sql.append(" ecl_pais ");        
        sql.append("FROM avw_produccion.empresa_cliente ");
        sql.append("WHERE ecl_mail LIKE ?");        
        params.add(new BoundParam(++pos,eclMail.toUpperCase(),java.sql.Types.VARCHAR));
                
        try {
            
            logger.info("Consulto una empresa cliente");
            logger.info(sql.toString());
            conexion.abrirConexion();
            rs = conexion.getPreparedStatementResultSet(sql,params);
            
           
            while(rs.next()){
               
                
                empresacliente.setEclCodigo(Utiles.noNull(rs.getString("ecl_codigo")));             
                empresacliente.setEclDescripcion(Utiles.noNull(rs.getString("ecl_descripcion")));             
                empresacliente.setEclTelefono(Utiles.noNull(rs.getString("ecl_telefono")));
                empresacliente.setEclCuit(Utiles.noNull(rs.getString("ecl_cuit")));
                empresacliente.setEclMail(Utiles.noNull(rs.getString("ecl_mail")));
                empresacliente.setEclCalle(Utiles.noNull(rs.getString("ecl_calle")));
                empresacliente.setEclNumero(Utiles.noNull(rs.getString("ecl_numero")));
                empresacliente.setEclPiso(Utiles.noNull(rs.getString("ecl_piso")));
                empresacliente.setEclDpto(Utiles.noNull(rs.getString("ecl_dpto")));
                empresacliente.setEclLocalidad(new Ubicacion(Utiles.noNull(rs.getString("ecl_localidad"))));
                empresacliente.setEclProvincia(new Ubicacion(Utiles.noNull(rs.getString("ecl_provincia"))));
                empresacliente.setEclPais(new Ubicacion(Utiles.noNull(rs.getString("ecl_pais"))));                 
           }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }finally {
            conexion.cerrarConexion();
        }
        return empresacliente;      
    }

 /**
 *ingresa una nueva empresa cliente y recibe como parametros un objeto empresa
 **/
    
    public static void insertarEmpresaCliente(EmpresaClienteNegocio empresaCliente) throws SQLException, AvwException{
        
        StringBuilder sql = new StringBuilder();
        ResultSet rs;
        ConexionAvw conexion = new ConexionAvw();
        ArrayList params = new ArrayList();
        int pos=0;
        try {         
            
            sql.append("INSERT INTO ");
            sql.append("empresa_cliente ( ");            
            //sql.append(" ecl_codigo, ");
            sql.append(" ecl_descripcion, ");        
            sql.append(" ecl_telefono, ");        
            sql.append(" ecl_cuit, ");        
            sql.append(" ecl_mail, ");        
            sql.append(" ecl_calle, ");        
            sql.append(" ecl_numero, ");        
            sql.append(" ecl_piso, ");        
            sql.append(" ecl_dpto, ");        
            sql.append(" ecl_localidad, ");        
            sql.append(" ecl_provincia, ");        
            sql.append(" ecl_pais) ");                   
            sql.append("VALUES ( ");            
            sql.append(" '");            
            sql.append(Utiles.noNull(empresaCliente.getEclDescripcion().toUpperCase()));
            sql.append("' , '");
            sql.append(Utiles.noNull(empresaCliente.getEclTelefono().toUpperCase()));
            sql.append("' , '");
            sql.append(Utiles.noNull(empresaCliente.getEclCuit().toUpperCase()));
            sql.append("' , '");
            sql.append(Utiles.noNull(empresaCliente.getEclMail().toUpperCase()));
            sql.append("' , '");
            sql.append(Utiles.noNull(empresaCliente.getEclCalle().toUpperCase()));
            sql.append("' , '");
            sql.append(Utiles.noNull(empresaCliente.getEclNumero().toUpperCase()));
            sql.append("' , '");
            sql.append(Utiles.noNull(empresaCliente.getEclPiso().toUpperCase()));
            sql.append("' , '");
            sql.append(Utiles.noNull(empresaCliente.getEclDpto().toUpperCase()));
            sql.append("' , '");
            sql.append(Utiles.noNull(empresaCliente.getEclLocalidad().getUbiCodigo()));
            sql.append("' , '");
            sql.append(Utiles.noNull(empresaCliente.getEclProvincia().getUbiCodigo()));
            sql.append("' , '");
            sql.append(Utiles.noNull(empresaCliente.getEclPais().getUbiCodigo()));
            sql.append("' ) ");
                                   
            logger.info(sql.toString());                        
            conexion.abrirConexion();
            conexion.startTransaction();               
            conexion.executePreparedStatement(sql,null);    
            conexion.commitTransaction();
            
        } catch (SQLException ex) {
            logger.log(Level.SEVERE,ex.getMessage(),ex);            
            conexion.rollbackTransaction();
        }finally {
            conexion.cerrarConexion();
        }                
    }
    /**
     *modifica los datos de una empresa cliente 
     **/
    public static boolean modificarEmpresaCliente(EmpresaClienteNegocio empresaCliente) throws AvwException, SQLException{
        
        StringBuilder sql = new StringBuilder();
        ConexionAvw conexion = new ConexionAvw();
        ResultSet rs;
        
        try {                
            sql.append("UPDATE ");            
            sql.append(" empresa_cliente ");            
            sql.append(" SET "); 
            sql.append(" ecl_descripcion= '");            
            sql.append(Utiles.noNull(empresaCliente.getEclDescripcion().toUpperCase()));
            sql.append("'");
            sql.append(" , ecl_telefono= '");        
            sql.append(Utiles.noNull(empresaCliente.getEclTelefono().toUpperCase()));
            sql.append("'");
            sql.append(" ,ecl_cuit= '");        
            sql.append(Utiles.noNull(empresaCliente.getEclCuit().toUpperCase()));
            sql.append("'");
            sql.append(" ,ecl_mail= '");        
            sql.append(Utiles.noNull(empresaCliente.getEclMail().toUpperCase()));
            sql.append("'");
            sql.append(" ,ecl_calle= '");        
            sql.append(Utiles.noNull(empresaCliente.getEclCalle().toUpperCase()));
            sql.append("'");
            sql.append(" ,ecl_numero= '");        
            sql.append(Utiles.noNull(empresaCliente.getEclNumero().toUpperCase()));
            sql.append("'");
            sql.append(" ,ecl_piso= '");        
            sql.append(Utiles.noNull(empresaCliente.getEclPiso().toUpperCase()));
            sql.append("'");
            sql.append(" ,ecl_dpto= '");        
            sql.append(Utiles.noNull(empresaCliente.getEclDpto().toUpperCase()));
            sql.append("'");
            sql.append(" ,ecl_localidad= '");        
            sql.append(Utiles.noNull(empresaCliente.getEclLocalidad().getUbiCodigo()));
            sql.append("'");
            sql.append(" ,ecl_provincia= '");       
            sql.append(Utiles.noNull(empresaCliente.getEclProvincia().getUbiCodigo()));
            sql.append("'");
            sql.append(" ,ecl_pais= '");                   
            sql.append(Utiles.noNull(empresaCliente.getEclPais().getUbiCodigo()));
            sql.append("'");
            sql.append(" WHERE ecl_codigo LIKE ");
            sql.append(Utiles.noNull(empresaCliente.getEclCodigo().toUpperCase()));
            
            logger.info(sql.toString());                  
            conexion.abrirConexion();
            conexion.startTransaction();                   
            conexion.executePreparedStatement(sql,null);    
            conexion.commitTransaction();
            return true;
        } catch (SQLException ex) {
            ex.printStackTrace();
            conexion.rollbackTransaction();
            return false;
        }finally {
            conexion.cerrarConexion();
        }        
     
        
    }
}
